package example;

import project.Elemento;
import malhaFerroviaria.Ferrovia;
import interfacesFerrovia.TratadorDeEventos;

/**
 * Esta classe � um exempo de implementa��o da interface Tratador de Eventos.
 * O tratamento de cada evento, neste caso, se resume a listar na sa�da padr�o
 * os eventos ocorridos e os dados passados com os mesmos.
 * @author Vanini
 *
 */

public class Console implements TratadorDeEventos {

		@Override
		public void alarmeChave(String idChave, int instanteAtual,
				TipoFalha tipoDeFalha) {
			System.out.println("==> alarmeChave id:"+idChave+" t:"+instanteAtual+" falha:"+tipoDeFalha);

		}

		@Override
		public void alarmeComposicao(String idComposicao, int instanteAtual,
				TipoFalha tipoDeFalha) {
			System.out.println("==> alarmeComposicao id:"+idComposicao+" t:"+instanteAtual+" falha:"+tipoDeFalha);

		}

		@Override
		public void chegadaComposicao(String idComposicao, int instanteAtual,
				String idTrecho) {
			System.out.println("==> Chegada de Composicao id:"+idComposicao+" t:"+instanteAtual+" trecho:"+idTrecho);

		}

		@Override
		public void entradaComposicaoChave(String idChave, int instanteAtual,
				String idComposicao, String idTrechoOrigem) {
			
			// muda velocidade no nosso elemento
			// muda velocidade no simulador
			
			Ferrovia ferrovia = Ferrovia.getInstance();
			//ferrovia.acelerarComposicao(idComposicao, 10, true);
			if(idComposicao == "comp01" && idTrechoOrigem == "t4") 
				ferrovia.mudarChave("x1", "t3", "t4");
			
			System.out.println("==> entrada na chave id:"+idChave+" t:"+instanteAtual+
					           " id.Comp.:"+idComposicao+" tr.Origem:"+idTrechoOrigem);

		}

		@Override
		public void partidaComposicao(String idComposicao, int instanteAtual,
				String idTrecho) {
			System.out.println("==> partida composicao id:"+idComposicao+" t:"+instanteAtual+" trecho:"+idTrecho);

		}

		@Override
		public void passagemComposicao(String idTrecho, int instanteAtual,
				float posicao, String idComposicao, float velocidade,
				boolean sentidoAB) {
			System.out.println("==> passagem composicao id:"+idComposicao+" t:"+instanteAtual+
					           " trecho:"+idTrecho+" pos:"+posicao+" vel:"+velocidade+
					           " sent.AB:"+sentidoAB);
			
			Ferrovia ferrovia = Ferrovia.getInstance();
			if(idComposicao == "comp02" && posicao == 1500 ) {
				
				ferrovia.frearComposicao("comp02", 10, true);
				ferrovia.mudarChave("x1", "t1", "t4");
				ferrovia.mudarChave("x2", "t3", "t7");
			}

		}

		@Override
		public void saidaComposicaoChave(String idChave, int instanteAtual,
				String idComposicao, String idTrechoDestino) {
			System.out.println("==> saida da chave id:"+idChave+" t:"+instanteAtual+" id.Comp:"+
					           idComposicao+" tr.Dest:"+idTrechoDestino);

			Ferrovia ferrovia = Ferrovia.getInstance();
			
			if(idComposicao == "comp03") 
				ferrovia.mudarChave("x2", "t4", "t7");
			
			
		}

		@Override
		public void tic(int instanteAtual) {
			// nada a fazer, neste caso
		}



}
